# -*- coding: utf-8 -*-
# @Time    : 2020/3/12 下午12:55
# @Author  : lilong


"""
装饰器可以可以是一个函数，也可以是一个类，但必须要实现__call__方法，使其可以callable的，这样装饰器才可以修饰一个类。
"""


class ClassDecorator():
    """类装饰器"""
    def __init__(self, func):
        self.__numOfCall = 0
        self.__func = func

    def __call__(self, *args, **kwargs):
        self.__numOfCall += 1
        obj = self.__func(*args, **kwargs)
        print("创建{}的第{}个实例:{}".format(self.__func.__name__, self.__numOfCall, id(obj)))

        return obj

@ClassDecorator
class MyClass():

    def __init__(self, name):
        self.__name = name

    def getName(self):
        return self.__name


tony = MyClass("Tony")
karry = MyClass("Karry")
print(id(tony))
print(id(karry))